ferror関数は、ファイルポインタで示されるストリームのエラーの状態を調べます。
#include <stdio.h>
int ferror(FILE *stream);
*streamはfopen関数で取得した、ファイルポインタを指定します。
戻り値として、エラーであれば0以外の値を返します。
入力関数の多くはEOF(end of file)あるいは、エラーを検出したらEOF値を返しますので、EOFなのかエラーなのか分かりません。そのような場合に、ferror関数でエラーの状態か否かを調べることができます。
プログラム 例
#include <stdio.h>
int main(void)
{
FILE *fp;
int in_data;
if ((fp = fopen('temp.txt', 'r')) != NULL) {
while((in_data = fgetc(fp)) != EOF) {
putchar(in_data);
}
if (ferror(fp) != 0) {
printf('入力エラーです\n');
}
else {
printf('正常に入力しました\n');
}
fclose(fp);
}
else {
printf('ファイルのオープンに失敗しました\n');
}
return 0;
}
例の実行結果
$ cat temp.txt Hello World!!. $ $ ./ferror.exe Hello World!!. 正常に入力しました $